package com.kx.game.center.utils;

import java.security.MessageDigest;

/**
 * MD5 加密编码工具类（从龙之刃拷贝过来）
 * 
 * 
 */
public class MD5Util {

	/**
	 * 验证MD5密码是否正确
	 * 
	 * @param pass
	 * @param inputString
	 * @return
	 */
	public static boolean authMD5String(String md5, String inputString) {
		if (md5.equalsIgnoreCase(encodeByMD5(inputString))) {
			return true;
		} else {
			System.out.println(encodeByMD5(inputString));
			System.out.println(md5);
			return false;
		}
	}

	/**
	 * 将输入的字符串进行MD5加密（编码）
	 * 
	 * @param inputString
	 * @return
	 */
	public static String createMD5String(String inputString) {
		return encodeByMD5(inputString);
	}

	/**
	 * 对字符串进行MD5编码
	 * 
	 * @param originStr
	 * @return
	 */
	public static String encodeByMD5(String originStr) {
		if (originStr != null) {
			try {
				// 创建具有指定算法名称的信息摘要
				MessageDigest md = MessageDigest.getInstance("MD5");
				// 使用指定的字节数组对摘要进行最后的更新，然后完成摘要计算
				char[] _charStr = originStr.toCharArray();
				byte[] _byteStr = new byte[_charStr.length];
				for (int i = 0; i < _charStr.length; i++) {
					_byteStr[i] = (byte) _charStr[i];
				}
				byte[] _results = md.digest(_byteStr);
				StringBuffer _hexValue = new StringBuffer();
				for (int i = 0; i < _results.length; i++) {
					int _val = (_results[i]) & 0xff;
					if (_val < 16) {
						_hexValue.append("0");
					}
					_hexValue.append(Integer.toHexString(_val));
				}
				return _hexValue.toString();
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
		return null;
	}

	
	public final static String MD5(String s) {
        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};       
        try {
            byte[] btInput = s.getBytes();
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(btInput);
            // 获得密文
            byte[] md = mdInst.digest();
            // 把密文转换成十六进制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
	
}
